import { useUserStore } from '@/stores'
import axios from 'axios'
import router from '@/router'
import { ElMessage, ElMessageBox } from 'element-plus'
import { getToken } from '@/utils/auth'

const baseURL = '/api-medical'

const instance = axios.create({
  // 基础地址，超时时间
  baseURL,
  timeout: 100000
})
//请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 携带 token
    const userStore = useUserStore()
    if (userStore.token) {
      // 如果token存在，就放到请求头里  请求头的key为token，与后端的校验要一致
      config.headers.token = userStore.token
    }
    const token = getToken()
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`
    }
    console.log(
      '请求拦截器 - 发送请求:',
      config.url,
      config.method,
      config.params || config.data
    )
    return config
  },
  (err) => {
    console.error('请求拦截器 - 请求错误:', err)
    return Promise.reject(err)
  }
)
//响应拦截器
instance.interceptors.response.use(
  (res) => {
    console.log('响应拦截器 - 收到响应:', res.config.url, res.status, res.data)
    // 请求成功=1，返回响应数据
    if (res.data.code === 1) {
      return res
    }
    //业务逻辑处理失败
    ElMessage({ message: res.data.msg || '服务异常', type: 'error' })
    // 如果是未授权，则跳转到登录页
    if (res.data.code === 401) {
      ElMessageBox.confirm('登录状态已过期，请重新登录', '系统提示', {
        confirmButtonText: '重新登录',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        router.push('/login')
      })
    }
    return Promise.reject(res.data)
  },
  (err) => {
    console.error('响应拦截器 - 响应错误:', err)
    // 处理默认的错误情况 => 给提示
    ElMessage({
      message: err.response?.data.msg || '服务异常',
      type: 'error',
      duration: 5 * 1000
    })
    // 处理错误的特殊情况 => 401权限不足 或 token过期 => 拦截到登录
    if (err.response?.status === 401) {
      router.push('/login')
    }
    return Promise.reject(err)
  }
)

export default instance
export { baseURL }
